package page

import (
	"blog/model"
	"blog/service/data"
	"errors"

	"github.com/gin-gonic/gin"
)

type AdminTypePageService struct {
	typeDataService *data.TypeDataService
}

func NewAdminTypePageService() *AdminTypePageService {
	return &AdminTypePageService{
		typeDataService: &data.TypeDataService{},
	}
}

// GetAllTypes 获取所有分类（后台管理）
func (s *AdminTypePageService) GetAllTypes(ctx *gin.Context) []model.TypeListData {
	return s.typeDataService.GetTypeList(ctx, 0, -1)
}

// CreateType 创建分类（后台管理）
func (s *AdminTypePageService) CreateType(ctx *gin.Context, postType *model.TypeName) error {
	// 页面层处理：数据验证
	if postType.Name == "" {
		return errors.New("分类名称不能为空")
	}

	// 调用数据服务层创建分类
	return s.typeDataService.CreateTypeName(ctx, postType)
}

// UpdateType 更新分类（后台管理）
func (s *AdminTypePageService) UpdateType(ctx *gin.Context, postType *model.TypeName) error {
	// 页面层处理：数据验证
	if postType.Name == "" {
		return errors.New("分类名称不能为空")
	}

	// 调用数据服务层更新分类
	return s.typeDataService.UpdateTypeName(ctx, postType)
}

// GetTypeByID 根据ID获取分类（后台管理）
func (s *AdminTypePageService) GetTypeByID(ctx *gin.Context, id int64) (*model.TypeName, error) {
	return s.typeDataService.GetTypeNameByID(ctx, id)
}

// ValidateTypeFID 验证分类父级ID
func (s *AdminTypePageService) ValidateTypeFID(ctx *gin.Context, postType *model.TypeName, fid int) (bool, string) {
	return s.typeDataService.CheckAddFID(ctx, postType, fid)
}

// ValidateTypeName 验证分类名称
func (s *AdminTypePageService) ValidateTypeName(ctx *gin.Context, postType *model.TypeName, name string, fid int) (bool, string) {
	return s.typeDataService.CheckAddName(ctx, postType, name, fid)
}

// CreateTypeName 创建 TypeName 实例（页面层）
func (s *AdminTypePageService) CreateTypeName() *model.TypeName {
	return &model.TypeName{}
}

// GetTypeName 获取类型名称（页面层）
func (s *AdminTypePageService) GetTypeName(ctx *gin.Context, fid int) string {
	return s.typeDataService.GetTypeNameByFID(ctx, fid)
}
